package br.com.academia.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import br.com.academia.modelo.Contato;

public class ContatoDAO {

	private Connection connection;
	private PreparedStatement stmt;
	private ResultSet rs;
	private String sql;
	private boolean resultado = true;

	public ContatoDAO() {
		connection = new ConnectionFactory().getConnection();
	}

	public boolean incluir(Contato contato) {
		sql = "insert into contato (nome , email, mensagem) "
				+ "values (?,?,?)";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getMensagem());
			stmt.executeUpdate();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	private void close() {
		try {
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	public boolean alterar(Contato contato) {
		sql = "update contato set nome=? , email=?, mensagem=? where idcontato=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setString(1, contato.getNome());
			stmt.setString(2, contato.getEmail());
			stmt.setString(3, contato.getMensagem());
			stmt.setInt(4, (int) contato.getIdcontato());
			stmt.executeUpdate();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public boolean excluir(Contato contato) {
		sql = "delete from contato where idcontato = ?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, contato.getIdcontato());
			stmt.execute();
		} catch (SQLException e) {
			resultado = false;
			throw new RuntimeException(e);
		}
		close();
		return resultado;
	}

	public Contato consultar(Contato contato) {
		sql = "select nome, email, mensagem from contato where idcontato=?";
		try {
			stmt = connection.prepareStatement(sql);
			stmt.setInt(1, (int) contato.getIdcontato());
			rs = stmt.executeQuery();
			rs.next();
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setMensagem(rs.getString("mensagem"));
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return contato;
	}

	public ArrayList<Contato> listar() {
		ArrayList<Contato> lista = new ArrayList<>();
		sql = "select * from contato";
		try {
			stmt = connection.prepareStatement(sql);
			rs = stmt.executeQuery();
			Contato contato;
			while (rs.next()) {
				contato = new Contato();
				contato.setIdcontato(rs.getInt("idcontato"));
				contato.setNome(rs.getString("nome"));
				contato.setEmail(rs.getString("email"));
				contato.setMensagem(rs.getString("mensagem"));
				lista.add(contato);
			}
			rs.close();
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
		close();
		return lista;
	}
}
